ποΈGitΠ―ΡΠ°ποΈ
Node / meshtastic / Meshtastic-Android / files / feature / messaging / src / commonMain / kotlin / org / meshtastic / feature / messaging / component / MessageScreenComponents.kt
Displaying Raw β’ Download
feature/messaging/src/commonMain/kotlin/org/meshtastic/feature/messaging/component/MessageScreenComponents.kt bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 30.32 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooManyFunctionsTa5d6ff"Tb4b4b4)
Tf0883e@fileTb4b4b4:Te6edf3OptInTb4b4b4(Te6edf3ExperimentalMaterial3ExpressiveApiTff7b72::Te6edf3classTb4b4b4)
Tff7b72package T7ee787org.meshtastic.feature.messaging.component
Tff7b72import T7ee787androidx.compose.animation.AnimatedVisibility
Tff7b72import T7ee787androidx.compose.foundation.background
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Box
Tff7b72import T7ee787androidx.compose.foundation.layout.BoxScope
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.Spacer
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.foundation.layout.width
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyListState
Tff7b72import T7ee787androidx.compose.foundation.lazy.LazyRow
Tff7b72import T7ee787androidx.compose.foundation.lazy.items
Tff7b72import T7ee787androidx.compose.foundation.shape.RoundedCornerShape
Tff7b72import T7ee787androidx.compose.material3.Badge
Tff7b72import T7ee787androidx.compose.material3.BadgedBox
Tff7b72import T7ee787androidx.compose.material3.Button
Tff7b72import T7ee787androidx.compose.material3.CircularProgressIndicator
Tff7b72import T7ee787androidx.compose.material3.DropdownMenu
Tff7b72import T7ee787androidx.compose.material3.DropdownMenuGroup
Tff7b72import T7ee787androidx.compose.material3.DropdownMenuItem
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3Api
Tff7b72import T7ee787androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
Tff7b72import T7ee787androidx.compose.material3.FloatingActionButton
Tff7b72import T7ee787androidx.compose.material3.HorizontalDivider
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.IconButton
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.MenuDefaults
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.material3.TextField
Tff7b72import T7ee787androidx.compose.material3.TextFieldDefaults
Tff7b72import T7ee787androidx.compose.material3.TopAppBar
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.draw.clip
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.semantics.isSensitiveData
Tff7b72import T7ee787androidx.compose.ui.semantics.semantics
Tff7b72import T7ee787androidx.compose.ui.text.style.TextOverflow
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.jetbrains.compose.resources.pluralStringResource
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.database.entity.QuickChatAction
Tff7b72import T7ee787org.meshtastic.core.model.Message
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.alert_bell_text
Tff7b72import T7ee787org.meshtastic.core.resources.cancel
Tff7b72import T7ee787org.meshtastic.core.resources.cancel_reply
Tff7b72import T7ee787org.meshtastic.core.resources.clear
Tff7b72import T7ee787org.meshtastic.core.resources.clear_selection
Tff7b72import T7ee787org.meshtastic.core.resources.copy
Tff7b72import T7ee787org.meshtastic.core.resources.delete
Tff7b72import T7ee787org.meshtastic.core.resources.delete_messages
Tff7b72import T7ee787org.meshtastic.core.resources.delete_messages_title
Tff7b72import T7ee787org.meshtastic.core.resources.download
Tff7b72import T7ee787org.meshtastic.core.resources.filter_disable_for_contact
Tff7b72import T7ee787org.meshtastic.core.resources.filter_enable_for_contact
Tff7b72import T7ee787org.meshtastic.core.resources.filter_hide_count
Tff7b72import T7ee787org.meshtastic.core.resources.filter_settings
Tff7b72import T7ee787org.meshtastic.core.resources.filter_show_count
Tff7b72import T7ee787org.meshtastic.core.resources.navigate_back
Tff7b72import T7ee787org.meshtastic.core.resources.new_messages_below
Tff7b72import T7ee787org.meshtastic.core.resources.overflow_menu
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat_hide
Tff7b72import T7ee787org.meshtastic.core.resources.quick_chat_show
Tff7b72import T7ee787org.meshtastic.core.resources.reply
Tff7b72import T7ee787org.meshtastic.core.resources.replying_to
Tff7b72import T7ee787org.meshtastic.core.resources.scroll_to_bottom
Tff7b72import T7ee787org.meshtastic.core.resources.search_messages
Tff7b72import T7ee787org.meshtastic.core.resources.select_all
Tff7b72import T7ee787org.meshtastic.core.resources.translation_download_message
Tff7b72import T7ee787org.meshtastic.core.resources.translation_download_title
Tff7b72import T7ee787org.meshtastic.core.resources.translation_downloading
Tff7b72import T7ee787org.meshtastic.core.resources.unknown
Tff7b72import T7ee787org.meshtastic.core.ui.component.MeshtasticDialog
Tff7b72import T7ee787org.meshtastic.core.ui.component.MeshtasticTextDialog
Tff7b72import T7ee787org.meshtastic.core.ui.component.NodeKeyStatusIcon
Tff7b72import T7ee787org.meshtastic.core.ui.component.SecurityIcon
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowBack
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ArrowDownward
Tff7b72import T7ee787org.meshtastic.core.ui.icon.ChatBubbleOutline
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Close
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Copy
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Delete
Tff7b72import T7ee787org.meshtastic.core.ui.icon.FilterList
Tff7b72import T7ee787org.meshtastic.core.ui.icon.FilterListOff
Tff7b72import T7ee787org.meshtastic.core.ui.icon.KeyboardArrowDown
Tff7b72import T7ee787org.meshtastic.core.ui.icon.KeyboardArrowUp
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.More
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Muted
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Reply
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Search
Tff7b72import T7ee787org.meshtastic.core.ui.icon.SelectAll
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Settings
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Unmuted
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Visibility
Tff7b72import T7ee787org.meshtastic.core.ui.icon.VisibilityOff
Tff7b72import T7ee787org.meshtastic.feature.messaging.DeliveryInfo
Tff7b72import T7ee787org.meshtastic.feature.messaging.TranslationDialogState
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
T8b949e// region ββ ScrollToBottomFab ββ
T8b949e/**
* A FloatingActionButton that scrolls the message list to the bottom (most recent messages).
*
* @param coroutineScope The coroutine scope for launching the scroll animation.
* @param listState The [LazyListState] of the message list.
* @param unreadCount The number of unread messages to display as a badge.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Te6edf3BoxScopeTb4b4b4.Td2a8ffScrollToBottomFabTb4b4b4(Te6edf3coroutineScopeTb4b4b4: Te6edf3CoroutineScopeTb4b4b4, Te6edf3listStateTb4b4b4: Te6edf3LazyListStateTb4b4b4, Te6edf3unreadCountTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4{
Te6edf3FloatingActionButtonTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3alignTb4b4b4(Te6edf3AlignmentTb4b4b4.Te6edf3BottomEndTb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3coroutineScopeTb4b4b4.Te6edf3launch Tb4b4b4{ Te6edf3listStateTb4b4b4.Te6edf3animateScrollToItemTb4b4b4(T79c0ff0Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3unreadCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3BadgedBoxTb4b4b4(Te6edf3badge Tff7b72= Tb4b4b4{ Te6edf3Badge Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3unreadCountTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowDownwardTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3scroll_to_bottomTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowDownwardTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3scroll_to_bottomTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ ReplySnippet ββ
T8b949e/**
* Displays a snippet of the message being replied to.
*
* @param originalMessage The message being replied to, or null if not replying.
* @param onClearReply Callback to clear the reply state.
* @param ourNode The current user's node information, to display "You" if replying to self.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffReplySnippetTb4b4b4(Te6edf3originalMessageTb4b4b4: Te6edf3Message?Tb4b4b4, Te6edf3onClearReplyTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3ourNodeTb4b4b4: Te6edf3Node?Tb4b4b4) Tb4b4b4{
Te6edf3AnimatedVisibilityTb4b4b4(Te6edf3visible Tff7b72= Te6edf3originalMessage Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3originalMessageTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3message Tff7b72-Tff7b72>
Tff7b72val Te6edf3isFromLocalUser Tff7b72= Te6edf3messageTb4b4b4.Te6edf3fromLocal
Tff7b72val Te6edf3replyingToNodeUser Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isFromLocalUserTb4b4b4) Te6edf3ourNodeTff7b72?.Te6edf3user Tff7b72else Te6edf3messageTb4b4b4.Te6edf3nodeTb4b4b4.Te6edf3user
Tff7b72val Te6edf3unknownUserText Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3unknownTb4b4b4)
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72=
Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)
Tb4b4b4.Te6edf3clipTb4b4b4(Te6edf3RoundedCornerShapeTb4b4b4(T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3backgroundTb4b4b4(Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3surfaceVariantTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3alpha Tff7b72= T79c0ff0.5fTb4b4b4)Tb4b4b4)
Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ReplyTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replyTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3replying_toTb4b4b4, Te6edf3replyingToNodeUserTff7b72?.Te6edf3short_name Tff7b72?: Te6edf3unknownUserTextTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelMediumTb4b4b4,
Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4.Te6edf3semantics Tb4b4b4{ Te6edf3isSensitiveData Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4,
Te6edf3text Tff7b72= Te6edf3messageTb4b4b4.Te6edf3textTb4b4b4.Te6edf3ellipsizeTb4b4b4(Te6edf3SNIPPET_CHARACTER_LIMITTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4,
Tb4b4b4)
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onClearReplyTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CloseTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancel_replyTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ DeleteMessageDialog ββ
T8b949e/**
* A dialog confirming the deletion of messages.
*
* @param count The number of messages to be deleted.
* @param onConfirm Callback invoked when the user confirms the deletion.
* @param onDismiss Callback invoked when the dialog is dismissed.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffDeleteMessageDialogTb4b4b4(Te6edf3countTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onConfirmTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3deleteMessagesString Tff7b72= Te6edf3pluralStringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3pluralsTb4b4b4.Te6edf3delete_messagesTb4b4b4, Te6edf3countTb4b4b4, Te6edf3countTb4b4b4)
Te6edf3MeshtasticTextDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3delete_messages_titleTb4b4b4,
Te6edf3message Tff7b72= Te6edf3deleteMessagesStringTb4b4b4,
Te6edf3confirmTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3deleteTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onConfirmTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ TranslationModelDownloadDialog ββ
T8b949e/**
* A dialog asking the user to confirm the one-time download of on-device translation models, then showing indeterminate
* progress while they download. Rendered as nothing when [state] is [TranslationDialogState.Hidden].
*
* @param state The current dialog state from [org.meshtastic.feature.messaging.MessageViewModel].
* @param onConfirm Callback invoked when the user confirms the model download.
* @param onDismiss Callback invoked when the prompt is dismissed.
*/
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffTranslationModelDownloadDialogTb4b4b4(
Te6edf3stateTb4b4b4: Te6edf3TranslationDialogStateTb4b4b4,
Te6edf3onConfirmTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3stateTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3Hidden Tff7b72-Tff7b72> Tb4b4b4{Tb4b4b4}
Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3DownloadPrompt Tff7b72-Tff7b72>
Te6edf3MeshtasticTextDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_titleTb4b4b4,
Te6edf3message Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_messageTb4b4b4, Te6edf3stateTb4b4b4.Te6edf3estimatedSizeMbTb4b4b4)Tb4b4b4,
Te6edf3confirmTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3downloadTb4b4b4,
Te6edf3dismissTextRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3cancelTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onConfirmTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)
Tff7b72is Te6edf3TranslationDialogStateTb4b4b4.Te6edf3Downloading Tff7b72-Tff7b72>
Te6edf3MeshtasticDialogTb4b4b4(
Te6edf3titleRes Tff7b72= Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_download_titleTb4b4b4,
Te6edf3text Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3CircularProgressIndicatorTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff2T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3translation_downloadingTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3dismissable Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ ActionModeTopBar & MessageMenuAction ββ
T8b949e/** Actions available in the message selection mode's top bar. */
Tff7b72sealed Tff7b72class T56d364MessageMenuAction Tb4b4b4{
Tff7b72data Tff7b72object T56d364ClipboardCopy Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)
Tff7b72data Tff7b72object T56d364Delete Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)
Tff7b72data Tff7b72object T56d364Dismiss Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)
Tff7b72data Tff7b72object T56d364SelectAll Tb4b4b4: Te6edf3MessageMenuActionTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e/**
* The top app bar displayed when in message selection mode.
*
* @param selectedCount The number of currently selected messages.
* @param onAction Callback for when a menu action is triggered.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffActionModeTopBarTb4b4b4(Te6edf3selectedCountTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onActionTb4b4b4: Tb4b4b4(Te6edf3MessageMenuActionTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tff7b72= Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3selectedCountTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3DismissTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clear_selectionTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3ClipboardCopyTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CopyTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3copyTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3DeleteTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3DeleteTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3deleteTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onActionTb4b4b4(Te6edf3MessageMenuActionTb4b4b4.Te6edf3SelectAllTb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SelectAllTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3select_allTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
T8b949e// endregion
T8b949e// region ββ MessageTopBar ββ
T8b949e/**
* The default top app bar for the message screen.
*
* @param title The title to display (contact or channel name).
* @param channelIndex The index of the current channel, if applicable.
* @param mismatchKey True if there's a key mismatch for the current PKC.
* @param onNavigateBack Callback for the navigation icon.
* @param channels The set of all channels, used for the [SecurityIcon].
* @param channelIndexParam The specific channel index for the [SecurityIcon].
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffMessageTopBarTb4b4b4(
Te6edf3titleTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3channelIndexTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3mismatchKeyTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onNavigateBackTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3channelsTb4b4b4: Te6edf3ChannelSet?Tb4b4b4,
Te6edf3channelIndexParamTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onSearchClickTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3TopAppBarTb4b4b4(
Te6edf3title Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3titleTb4b4b4, Te6edf3maxLines Tff7b72= T79c0ff1Tb4b4b4, Te6edf3overflow Tff7b72= Te6edf3TextOverflowTb4b4b4.Te6edf3EllipsisTb4b4b4)
Te6edf3SpacerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3widthTb4b4b4(T79c0ff1T79c0ff0.Te6edf3dpTb4b4b4)Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3channels Tff7b72!Tff7b72= Tff7b72null Tff7b72&Tff7b72& Te6edf3channelIndexParam Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3SecurityIconTb4b4b4(Te6edf3channelsTb4b4b4, Te6edf3channelIndexParamTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onNavigateBackTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3navigate_backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onSearchClickTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SearchTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3MessageTopBarActionsTb4b4b4(
Te6edf3showQuickChat Tff7b72= Te6edf3showQuickChatTb4b4b4,
Te6edf3onToggleQuickChat Tff7b72= Te6edf3onToggleQuickChatTb4b4b4,
Te6edf3onNavigateToQuickChatOptions Tff7b72= Te6edf3onNavigateToQuickChatOptionsTb4b4b4,
Te6edf3channelIndex Tff7b72= Te6edf3channelIndexTb4b4b4,
Te6edf3mismatchKey Tff7b72= Te6edf3mismatchKeyTb4b4b4,
Te6edf3filteringDisabled Tff7b72= Te6edf3filteringDisabledTb4b4b4,
Te6edf3onToggleFilteringDisabled Tff7b72= Te6edf3onToggleFilteringDisabledTb4b4b4,
Te6edf3filteredCount Tff7b72= Te6edf3filteredCountTb4b4b4,
Te6edf3showFiltered Tff7b72= Te6edf3showFilteredTb4b4b4,
Te6edf3onToggleShowFiltered Tff7b72= Te6edf3onToggleShowFilteredTb4b4b4,
Te6edf3onNavigateToFilterSettings Tff7b72= Te6edf3onNavigateToFilterSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffMessageTopBarActionsTb4b4b4(
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3channelIndexTb4b4b4: Tffa657Int?Tb4b4b4,
Te6edf3mismatchKeyTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3channelIndex Tff7b72=Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3PKC_CHANNEL_INDEXTb4b4b4) Tb4b4b4{
Te6edf3NodeKeyStatusIconTb4b4b4(Te6edf3hasPKC Tff7b72= Tff7b72trueTb4b4b4, Te6edf3mismatchKey Tff7b72= Te6edf3mismatchKeyTb4b4b4)
Tb4b4b4}
Tff7b72var Te6edf3expanded Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableStateOfTb4b4b4(Tff7b72falseTb4b4b4) Tb4b4b4}
Te6edf3Box Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3expanded Tff7b72= Tff7b72true Tb4b4b4}Tb4b4b4, Te6edf3enabled Tff7b72= Tff7b72trueTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3MoreTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3overflow_menuTb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3OverFlowMenuTb4b4b4(
Te6edf3expanded Tff7b72= Te6edf3expandedTb4b4b4,
Te6edf3onDismiss Tff7b72= Tb4b4b4{ Te6edf3expanded Tff7b72= Tff7b72false Tb4b4b4}Tb4b4b4,
Te6edf3showQuickChat Tff7b72= Te6edf3showQuickChatTb4b4b4,
Te6edf3onToggleQuickChat Tff7b72= Te6edf3onToggleQuickChatTb4b4b4,
Te6edf3onNavigateToQuickChatOptions Tff7b72= Te6edf3onNavigateToQuickChatOptionsTb4b4b4,
Te6edf3filteringDisabled Tff7b72= Te6edf3filteringDisabledTb4b4b4,
Te6edf3onToggleFilteringDisabled Tff7b72= Te6edf3onToggleFilteringDisabledTb4b4b4,
Te6edf3filteredCount Tff7b72= Te6edf3filteredCountTb4b4b4,
Te6edf3showFiltered Tff7b72= Te6edf3showFilteredTb4b4b4,
Te6edf3onToggleShowFiltered Tff7b72= Te6edf3onToggleShowFilteredTb4b4b4,
Te6edf3onNavigateToFilterSettings Tff7b72= Te6edf3onNavigateToFilterSettingsTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffOverFlowMenuTb4b4b4(
Te6edf3expandedTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleQuickChatTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToQuickChatOptionsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleFilteringDisabledTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3filteredCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onToggleShowFilteredTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateToFilterSettingsTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3expandedTb4b4b4) Tb4b4b4{
Te6edf3DropdownMenuTb4b4b4(Te6edf3expanded Tff7b72= Te6edf3expandedTb4b4b4, Te6edf3onDismissRequest Tff7b72= Te6edf3onDismissTb4b4b4) Tb4b4b4{
Te6edf3DropdownMenuGroupTb4b4b4(Te6edf3shapes Tff7b72= Te6edf3MenuDefaultsTb4b4b4.Te6edf3groupShapesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3QuickChatToggleMenuItemTb4b4b4(Te6edf3showQuickChatTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleQuickChatTb4b4b4)
Te6edf3QuickChatOptionsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4, Te6edf3onNavigateToQuickChatOptionsTb4b4b4)
Tb4b4b4}
Te6edf3DropdownMenuGroupTb4b4b4(Te6edf3shapes Tff7b72= Te6edf3MenuDefaultsTb4b4b4.Te6edf3groupShapesTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3filteredCount Tff7b72> T79c0ff0 Tff7b72&Tff7b72& Tff7b72!Te6edf3filteringDisabledTb4b4b4) Tb4b4b4{
Te6edf3FilteredMessagesMenuItemTb4b4b4(Te6edf3showFilteredTb4b4b4, Te6edf3filteredCountTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleShowFilteredTb4b4b4)
Tb4b4b4}
Te6edf3FilterToggleMenuItemTb4b4b4(Te6edf3filteringDisabledTb4b4b4, Te6edf3onDismissTb4b4b4, Te6edf3onToggleFilteringDisabledTb4b4b4)
Te6edf3FilterSettingsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4, Te6edf3onNavigateToFilterSettingsTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffQuickChatToggleMenuItemTb4b4b4(Te6edf3showQuickChatTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3showQuickChatTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chat_hide Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chat_showTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3showQuickChatTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Muted Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3UnmutedTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffQuickChatOptionsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onNavigateTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3quick_chatTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onNavigateTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{ Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ChatBubbleOutlineTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilteredMessagesMenuItemTb4b4b4(Te6edf3showFilteredTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3countTb4b4b4: Tffa657IntTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Tff7b72if Tb4b4b4(Te6edf3showFilteredTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_hide_count Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_show_countTb4b4b4, Te6edf3countTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3showFilteredTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VisibilityOff Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3VisibilityTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilterToggleMenuItemTb4b4b4(Te6edf3filteringDisabledTb4b4b4: Tffa657BooleanTb4b4b4, Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onToggleTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72=
Te6edf3stringResourceTb4b4b4(
Tff7b72if Tb4b4b4(Te6edf3filteringDisabledTb4b4b4) Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_enable_for_contact Tff7b72else Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_disable_for_contactTb4b4b4,
Tb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onToggleTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Tff7b72if Tb4b4b4(Te6edf3filteringDisabledTb4b4b4) Te6edf3MeshtasticIconsTb4b4b4.Te6edf3FilterList Tff7b72else Te6edf3MeshtasticIconsTb4b4b4.Te6edf3FilterListOffTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Composable
Tff7b72private Tff7b72fun Td2a8ffFilterSettingsMenuItemTb4b4b4(Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4, Te6edf3onNavigateTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3title Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3filter_settingsTb4b4b4)
Te6edf3DropdownMenuItemTb4b4b4(
Te6edf3text Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onClick Tff7b72= Tb4b4b4{
Te6edf3onDismissTb4b4b4(Tb4b4b4)
Te6edf3onNavigateTb4b4b4(Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3leadingIcon Tff7b72= Tb4b4b4{ Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3SettingsTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3titleTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ QuickChatRow ββ
T8b949e/**
* A row of quick chat action buttons.
*
* @param enabled Whether the buttons should be enabled.
* @param actions The list of [QuickChatAction]s to display.
* @param onClick Callback when a quick chat button is clicked.
*/
Tf0883e@Composable
Tff7b72fun Td2a8ffQuickChatRowTb4b4b4(
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3enabledTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3actionsTb4b4b4: Te6edf3ListTff7b72<Te6edf3QuickChatActionTff7b72>Tb4b4b4,
Te6edf3onClickTb4b4b4: Tb4b4b4(Te6edf3QuickChatActionTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3alertActionMessage Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3alert_bell_textTb4b4b4)
Tff7b72val Te6edf3alertAction Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3alertActionMessageTb4b4b4) Tb4b4b4{
Te6edf3QuickChatActionTb4b4b4(
Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffπTa5d6ff"Tb4b4b4,
Te6edf3message Tff7b72= Ta5d6ff"Ta5d6ffπ Tffd700$Te6edf3alertActionMessageTa5d6ff Ta5d6ff\Ta5d6ffu0007Ta5d6ff"Tb4b4b4,
Te6edf3mode Tff7b72= Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3AppendTb4b4b4,
Te6edf3position Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3allActions Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3alertActionTb4b4b4, Te6edf3actionsTb4b4b4) Tb4b4b4{ Te6edf3listOfTb4b4b4(Te6edf3alertActionTb4b4b4) Tff7b72+ Te6edf3actions Tb4b4b4}
Te6edf3LazyRowTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3vertical Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3itemsTb4b4b4(Te6edf3allActionsTb4b4b4, Te6edf3key Tff7b72= Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uuid Tb4b4b4}Tb4b4b4) Tb4b4b4{ Te6edf3action Tff7b72-Tff7b72>
Te6edf3ButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onClickTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4}Tb4b4b4, Te6edf3enabled Tff7b72= Te6edf3enabledTb4b4b4) Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3actionTb4b4b4.Te6edf3nameTb4b4b4) Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Handles a quick chat action, either appending its message to the current text or sending it directly.
*
* @param action The [QuickChatAction] to handle.
* @param currentText The current text in the message input.
* @param onUpdateText Lambda to call when the text needs to be updated (for Append mode).
* @param onSendMessage Lambda to call when a message needs to be sent (for Instant mode).
*/
Tff7b72fun Td2a8ffhandleQuickChatActionTb4b4b4(
Te6edf3actionTb4b4b4: Te6edf3QuickChatActionTb4b4b4,
Te6edf3currentTextTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3onUpdateTextTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onSendMessageTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72when Tb4b4b4(Te6edf3actionTb4b4b4.Te6edf3modeTb4b4b4) Tb4b4b4{
Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3Append Tff7b72-Tff7b72> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3currentTextTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3newText Tff7b72=
Te6edf3buildString Tb4b4b4{
Te6edf3appendTb4b4b4(Te6edf3currentTextTb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3currentTextTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Tff7b72!Te6edf3currentTextTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff' 'Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3appendTb4b4b4(Ta5d6ff' 'Tb4b4b4)
Tb4b4b4}
Te6edf3appendTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3limitBytesTb4b4b4(Te6edf3MESSAGE_CHARACTER_LIMIT_BYTESTb4b4b4)
Te6edf3onUpdateTextTb4b4b4(Te6edf3newTextTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Te6edf3QuickChatActionTb4b4b4.Te6edf3ModeTb4b4b4.Te6edf3Instant Tff7b72-Tff7b72> Tb4b4b4{
Te6edf3onSendMessageTb4b4b4(Te6edf3actionTb4b4b4.Te6edf3messageTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ UnreadMessagesDivider ββ
Tf0883e@Composable
Tff7b72fun Td2a8ffUnreadMessagesDividerTb4b4b4(Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4) Tb4b4b4{
Te6edf3RowTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3horizontal Tff7b72= T79c0ff1T79c0ff6.Te6edf3dpTb4b4b4, Te6edf3vertical Tff7b72= T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4,
Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff8.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3HorizontalDividerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3new_messages_belowTb4b4b4)Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3labelMediumTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primaryTb4b4b4,
Tb4b4b4)
Te6edf3HorizontalDividerTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3weightTb4b4b4(T79c0ff1fTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ MessageStatusDialog ββ
Tf0883e@Composable
Tff7b72fun Td2a8ffMessageStatusDialogTb4b4b4(
Te6edf3messageTb4b4b4: Te6edf3MessageTb4b4b4,
Te6edf3resendOptionTb4b4b4: Tffa657BooleanTb4b4b4,
Te6edf3onResendTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onDismissTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3isDirectMessageTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Tb4b4b4(Te6edf3titleTb4b4b4, Te6edf3textTb4b4b4) Tff7b72= Te6edf3messageTb4b4b4.Te6edf3getStatusStringResTb4b4b4(Te6edf3isDirectMessageTb4b4b4)
Te6edf3DeliveryInfoTb4b4b4(
Te6edf3title Tff7b72= Te6edf3titleTb4b4b4,
Te6edf3resendOption Tff7b72= Te6edf3resendOptionTb4b4b4,
Te6edf3text Tff7b72= Te6edf3textTb4b4b4,
Te6edf3detail Tff7b72= Te6edf3messageTb4b4b4.Te6edf3getStatusDetailResTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3relays Tff7b72= Te6edf3messageTb4b4b4.Te6edf3relaysTb4b4b4,
Te6edf3onConfirm Tff7b72= Te6edf3onResendTb4b4b4,
Te6edf3onDismiss Tff7b72= Te6edf3onDismissTb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ Utility Functions ββ
T8b949e/** The maximum number of characters to display in the reply snippet. */
Tff7b72internal Tff7b72const Tff7b72val Te6edf3SNIPPET_CHARACTER_LIMIT Tff7b72= T79c0ff5T79c0ff0
T8b949e/** The maximum byte size for a message. */
Tff7b72const Tff7b72val Te6edf3MESSAGE_CHARACTER_LIMIT_BYTES Tff7b72= T79c0ff2T79c0ff0T79c0ff0
T8b949e/**
* Ellipsizes a string if its length exceeds [maxLength].
*
* @param maxLength The maximum number of characters to display before adding "β¦".
* @return The ellipsized string.
* @receiver The string to ellipsize.
*/
Tff7b72fun Te6edf3StringTb4b4b4.Td2a8ffellipsizeTb4b4b4(Te6edf3maxLengthTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Tff7b72if Tb4b4b4(Te6edf3length Tff7b72> Te6edf3maxLengthTb4b4b4) Ta5d6ff"Tffd700${Te6edf3takeTb4b4b4(Te6edf3maxLengthTb4b4b4)Tffd700}Ta5d6ffβ¦Ta5d6ff" Tff7b72else Tff7b72this
T8b949e/**
* Truncates a string to ensure its UTF-8 byte representation does not exceed [maxBytes].
*
* @param maxBytes The maximum allowed byte length.
* @return The truncated string, or the original string if it's within the byte limit.
* @receiver The string to limit.
*/
Tff7b72fun Te6edf3StringTb4b4b4.Td2a8fflimitBytesTb4b4b4(Te6edf3maxBytesTb4b4b4: Tffa657IntTb4b4b4)Tb4b4b4: Tffa657String Tb4b4b4{
Tff7b72val Te6edf3bytes Tff7b72= Tff7b72thisTb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3bytesTb4b4b4.Te6edf3size Tff7b72<Tff7b72= Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72this
Tb4b4b4}
Tff7b72var Te6edf3currentBytesSum Tff7b72= T79c0ff0
Tff7b72var Te6edf3validCharCount Tff7b72= T79c0ff0
Tff7b72for Tb4b4b4(Te6edf3charIndex Tff7b72in Tff7b72thisTb4b4b4.Te6edf3indicesTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3charToTest Tff7b72= Tff7b72thisTff7b72[Te6edf3charIndexTff7b72]
Tff7b72val Te6edf3charBytes Tff7b72= Te6edf3charToTestTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3encodeToByteArrayTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3size
Tff7b72if Tb4b4b4(Te6edf3currentBytesSum Tff7b72+ Te6edf3charBytes Tff7b72> Te6edf3maxBytesTb4b4b4) Tb4b4b4{
Tff7b72break
Tb4b4b4}
Te6edf3currentBytesSum Tff7b72+Tff7b72= Te6edf3charBytes
Te6edf3validCharCountTff7b72+Tff7b72+
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3validCharCountTb4b4b4)
Tb4b4b4}
T8b949e// endregion
T8b949e// region ββ MessageSearchBar ββ
T8b949e/**
* M3 contextual search bar that replaces the standard MessageTopBar when search is active. Follows the M3 "find in
* page" pattern: back arrow + text field + "X of Y" counter + prev/next arrows + clear.
*
* This uses [TopAppBar] rather than [SearchBar] because we're filtering within an existing conversation (contextual
* search), not performing primary app-level navigation search.
*/
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalMaterial3ApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffMessageSearchBarTb4b4b4(
Te6edf3queryTb4b4b4: Tffa657StringTb4b4b4,
Te6edf3onQueryChangeTb4b4b4: Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onCloseTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3resultCountTb4b4b4: Tffa657IntTb4b4b4,
Te6edf3currentIndexTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3onPreviousTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onNextTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657Unit Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3TopAppBarTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4,
Te6edf3navigationIcon Tff7b72= Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onCloseTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3ArrowBackTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3navigate_backTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3title Tff7b72= Tb4b4b4{
Te6edf3TextFieldTb4b4b4(
Te6edf3value Tff7b72= Te6edf3queryTb4b4b4,
Te6edf3onValueChange Tff7b72= Te6edf3onQueryChangeTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3placeholder Tff7b72= Tb4b4b4{
Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3singleLine Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3textStyle Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4,
Te6edf3colors Tff7b72=
Te6edf3TextFieldDefaultsTb4b4b4.Te6edf3colorsTb4b4b4(
Te6edf3focusedContainerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3unfocusedContainerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3focusedIndicatorColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Te6edf3unfocusedIndicatorColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3actions Tff7b72= Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3queryTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3resultCount Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3TextTb4b4b4(
Te6edf3text Tff7b72= Ta5d6ff"Tffd700${Te6edf3currentIndex Tff7b72+ T79c0ff1Tffd700}Ta5d6ff / Tffd700$Te6edf3resultCountTa5d6ff"Tb4b4b4,
Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodySmallTb4b4b4,
Te6edf3color Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariantTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3end Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onPreviousTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3KeyboardArrowUpTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onNextTb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3KeyboardArrowDownTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3search_messagesTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3queryTb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3IconButtonTb4b4b4(Te6edf3onClick Tff7b72= Tb4b4b4{ Te6edf3onQueryChangeTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4{
Te6edf3IconTb4b4b4(Te6edf3imageVector Tff7b72= Te6edf3MeshtasticIconsTb4b4b4.Te6edf3CloseTb4b4b4, Te6edf3contentDescription Tff7b72= Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3clearTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
T8b949e// endregion
Served by rngit 1.5.0 - Generated in 0.51s